import axios from 'axios'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
import router from '@/router'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 直接从localStorage获取token，避免store实例问题
    const token = localStorage.getItem('token')
    if (token) {
      // 确保使用标准的Authorization头部格式
      config.headers['Authorization'] = `Bearer ${token}`
      // 调试：打印token信息
      // console.log('请求拦截器拿到了Token being sent:', token.substring(0, 50) + '...')
      // console.log('请求URL:', config.url)
      // console.log('请求方法:', config.method)
      // console.log('请求头:', config.headers)
      
      // 额外检查：确保headers对象存在
      if (!config.headers) {
        config.headers = {}
      }
      
      // 强制设置Authorization头
      config.headers.Authorization = `Bearer ${token}`
      // console.log('强制设置后的请求头:', config.headers)
    } else {
      console.log('No token found in localStorage')
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)


// 响应拦截器
request.interceptors.response.use(
  response => {
    return response
  },
  error => {
    const { response } = error
    
    if (response) {
      switch (response.status) {
        case 401:
          // 检查是否是token过期还是缺少token
          if (response.data?.message?.includes('缺少Authorization头部')) {
            console.log('缺少Authorization头部，可能是token未正确传递')
            ElMessage.error('认证失败，请重新登录')
          } else {
            ElMessage.error('登录已过期，请重新登录')
          }
          // 不要立即清除token，让用户手动处理
          // const userStore = useUserStore()
          // userStore.logout()
          // router.push('/login')
          break
        case 403:
          ElMessage.error('权限不足')
          break
        case 404:
          ElMessage.error('请求的资源不存在')
          break
        case 500:
          ElMessage.error('服务器内部错误')
          break
        default:
          ElMessage.error(response.data?.message || '请求失败')
      }
    } else {
      ElMessage.error('网络错误，请检查网络连接')
    }
    
    return Promise.reject(error)
  }
)

export default request 